package com.atguigu.gmall.item.service.impl;

import com.alibaba.fastjson.JSON;
import com.atguigu.gmall.item.service.ItemService;
import com.atguigu.gmall.model.product.BaseCategoryView;
import com.atguigu.gmall.model.product.SkuInfo;
import com.atguigu.gmall.model.product.SpuSaleAttr;
import com.atguigu.gmall.product.client.ProductFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author mqx
 * @date 2021-2-3 15:55:51
 */
@Service
public class ItemServiceImpl implements ItemService {

    @Autowired
    private ProductFeignClient productFeignClient;

    @Override
    public Map<String, Object> getBySkuId(Long skuId) {
        Map<String, Object> result = new HashMap<>();
        //  远程调用方法

        //  skuInfo+skuImage集合 数据
        SkuInfo skuInfo = productFeignClient.getSkuInfo(skuId);
        //  获取分类数据
        BaseCategoryView categoryView = productFeignClient.getCategoryView(skuInfo.getCategory3Id());
        //  获取到价格
        BigDecimal skuPrice = productFeignClient.getSkuPrice(skuId);
        //  获取到回显的销售属性+销售属性值+锁定功能数据
        List<SpuSaleAttr> spuSaleAttrListCheckBySku = productFeignClient.getSpuSaleAttrListCheckBySku(skuInfo.getId(), skuInfo.getSpuId());
        //  有关于用户点击销售属性值切换的功能！
        Map skuValueIdsMap = productFeignClient.getSkuValueIdsMap(skuInfo.getSpuId());
        //  因为前端需要的是Json 数据，因此在这个位置我们需要将Map 转换为Json 数据
        String mapJson = JSON.toJSONString(skuValueIdsMap);
        System.out.println(mapJson);

        //  将查询到的数据放入map集合中！
        //  有关于map中的key 如何起名！ Thymeleaf 前端获取数据的时候 ${name} ,后端应该存储 (name,admin)
        //  这个key 要与前端页面显示时获取的key一致！ ${skuInfo.skuName} 暂时从课件中获取！
        result.put("skuInfo",skuInfo);
        result.put("categoryView",categoryView);
        result.put("price",skuPrice);
        result.put("spuSaleAttrList",spuSaleAttrListCheckBySku);
        result.put("valuesSkuJson",mapJson);

        return result;
    }
}
